home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / find2.d < prev    next >
Text File  |  1997-10-26  |  4KB  |  83 lines

  1. DEFINITION MODULE Find2;
  2.  
  3. (* (c) Copyright 1992, Andreas Alich *)
  4.  
  5. FROM SYSTEM IMPORT ADDRESS;
  6.  
  7. TYPE
  8.     tpPattern = POINTER TO tPattern;
  9.     tpPat = POINTER TO tPat;
  10.     tPattern = RECORD
  11.         pFirst, (* erstes Teilmuster, ggf. NIL *)
  12.         pLast: tpPat; (* letztes Teilmuster, ggf. NIL *)
  13.     (* interne Werte: *)
  14.         any: CHAR;
  15.         backward: BOOLEAN;
  16.     END;
  17.     tpChar = POINTER TO CHAR;
  18.     tPat = RECORD
  19.         pNext, (* n„chstes Teilmuster, ggf. NIL *)
  20.         pPrev: tpPat; (* vorheriges Teilmuster, ggf. NIL *)
  21.         pMatch: tpChar; (* Zeiger auf gefundene Textstelle *)
  22.         len: SHORTINT; (* L„nge des Teilmusters *)
  23.     (* interne Werte: *)
  24.         pLimit: tpChar;
  25.         no_eol: BOOLEAN;
  26.         eol: CHAR;
  27.         idx: SHORTINT;
  28.         d: ARRAY CHAR OF [0..255];
  29.         pattern: ARRAY SHORTCARD OF CHAR; (* formaler Typ *)
  30.     END;
  31.  
  32. PROCEDURE Compile (VAR pattern: ARRAY OF CHAR; (* Muster *)
  33.                         exist, (* Joker fr genau ein beliebiges Zeichen *)
  34.                         all: CHAR; (* Joker fr beliebig viele beliebige Zeichen,
  35.                                           auch keines und Zeilenende *)
  36.                         all_but_eol: CHAR; (* Joker fr beliebig viele Zeichen
  37.                                                      ungleich Zeilenende ('eol'),
  38.                                                      auch keines *)
  39.                         eol: CHAR; (* Zeichen, das bei 'all_but_eol' als Zeilenende
  40.                                           gewertet wird *)
  41.                         cap, (* grož/klein ignorieren; nationale Sonderzeichen
  42.                                   werden bercksichtigt *)
  43.                         backward: BOOLEAN (* rckw„rts suchen *)
  44.                         ): tpPattern;
  45. (*
  46.     Compiliert das Muster vor fr die eigentliche Suche mit Find. Die Werte
  47.     in den Records drfen nicht ver„ndert werden!
  48.     Die Records werden mittels Storage alloziert. Falls der Speicher nicht
  49.     ausreicht, wird Exception.RAISE (Exception.eNoMemory) aufgerufen. Falls
  50.     kein Handler fr Exception installiert ist, wird im Fehlerfall NIL
  51.     zurckgegeben.
  52.     Die einzelnen tPat-Records repr„sentieren ein Teilmuster, das durch einen
  53.     Allquantor vom n„chsten Teilmuster im Muster getrennt ist. Mehrere
  54.     aufeinanderfolgende Allquantoren werden zu einem zusammengefaát.
  55.     Allquantoren am Anfang und am Ende des Musters werden ignoriert.
  56.     Existenzquantoren sind im Teilmuster enthalten.
  57. *)
  58.  
  59. PROCEDURE Find (Text: ADDRESS; (* Anfangsadresse des zu durchsuchenden Textes *)
  60.                 TextLen: LONGINT; (* Gesamtl„nge des Textes *)
  61.                 p: tpPattern; (* Zeiger auf vorcompiliertes Suchmuster *)
  62.                 Start: LONGINT (* Such-Startposition im Text *)
  63.                 ): BOOLEAN;
  64. (*
  65.     Durchsucht den Text ab Start nach dem bei Compile festgelegten Muster.
  66.     Falls das Muster gefunden wurde, wird TRUE geliefert, sonst FALSE.
  67.     Falls das Muster gefunden wurde, sind die Eintr„ge 'len' und 'pMatch'
  68.     in den tPat-Records gltig. 'pMatch' zeigt auf den Anfang des zum
  69.     Teilmuster passenden Textteils. 'len' gibt die L„nge des Teilmusters an.
  70.     Bei einem leeren Muster wird immer TRUE geliefert; in diesem Fall ist
  71.     'pPattern^.pFirst' = 'pPattern^.pLast' und in 'pPattern^.pFirst^.pMatch'
  72.     wird ein Zeiger auf die Startposition der Suche geliefert.
  73.     'pPattern^.pFirst^.len' ist in diesem Fall gleich Null.
  74. *)
  75.  
  76. PROCEDURE Dispose (VAR pPattern: tpPattern);
  77. (*
  78.     Gibt den Speicher, der bei 'Compile' alloziert wurde, wieder frei. Falls
  79.     'pPattern' NIL ist, so passiert nichts.
  80. *)
  81.  
  82. END Find2.
  83.